#ifndef CHESSBOARD_H
#define CHESSBOARD_H

#include <QLabel>
#include <QMouseEvent>
#include <QSound>
#include "types.h"

class ChessBoard : public QLabel
{
    Q_OBJECT
public:
    explicit ChessBoard(QWidget *parent = nullptr);
    ~ChessBoard();

    // 重写鼠标按下事件
    virtual void mousePressEvent(QMouseEvent* ev);

    // 成员数据设定接口
    void setGame_start(bool newGame_start);             // 设定游戏是否开始
    bool set_chess(int row, int col, int chess_type);   // 在指定位置落子 返回值为游戏是否还在进行
    void reset_board(void);             // 重置整个棋盘 所有数据初始化

    // 游戏规则判断
    bool test(int x, int y);            // 判断(x,y)位置起始的8个方向上有没有五子连珠
    bool judgment(void);                // 判断当前回合的玩家有没有五子连珠
    int find(int x, int y, int& row, int& col, int chess_type);  // 查找(x,y)位置起始最适合chess_type落子的位置
    void findPos(int& row, int& col, int chess_type);            // 用于AI查找下一步落子的位置

private:
    int table[MAXSIZE][MAXSIZE];        // 二维数组模拟棋盘
    QLabel* chess[MAXSIZE][MAXSIZE];    // 预先摆放好棋子label控件
    bool game_start;                    // 游戏是否已开始标签
    int cur_player;                     // 当前是哪一方的回合
    QSound* sound_chess;                // 落子音效

signals:
    void pos_press(int pos[2]);
};

#endif // CHESSBOARD_H
